package javafx179labs.gusev.lab2;

import javafx.stage.Stage;
import javafx.scene.Scene;
import javafx.scene.text.Text;
import javafx.scene.text.Font;
import javafx.ext.swing.SwingTextField;
import javafx.ext.swing.SwingButton;
import javafx.scene.Node;
import javafx.scene.input.MouseEvent;

var txtfld: SwingTextField = SwingTextField
{
    layoutX: 10
    layoutY: 20
    columns: 24
}

var i: Integer = bind sizeof(mas)-2;

var bt: SwingButton = SwingButton
{
    text: "Добавить"
    layoutX: 300
    layoutY: 19
    action: function()
    {
        var txt: Text = Text
        {
            font: Font { size: 14 }
            x: 10, y: i/3*25+98
            content: "{txtfld.text}"
        }
        txtfld.text = "";

        var delb: SwingButton = SwingButton
        {
            layoutX: 300, layoutY: i/3*25+80
            text: "Удалить"
            var ind: Integer = 1;
            onMouseClicked: function(event: MouseEvent)
            {
                var ind: Integer = 4;

                for (j in [2..sizeof(mas)-1])
                {
                    if ((j mod 3) == 2 or (j mod 3) == 1) { continue; }
                    else if ((mas[j] as SwingButton) == (event.node as SwingButton))
                    {
                        ind = j;
                        break;
                    }
                }

                delete mas[ind+1];
                delete mas[ind];
                delete mas[ind-1];

                for (j in [ind-1..sizeof(mas)-1])
                {
                    if ((j mod 3) == 2) { (mas[j] as Text).layoutY -= 25; }
                    else { (mas[j] as SwingButton).layoutY -= 25; }
                }
            }
        }

        var edb: SwingButton = SwingButton
        {
            layoutX: 380, layoutY: i/3*25+80
            text: "Редактировать"
            onMouseClicked: function(event: MouseEvent)
            {
                var ind: Integer = 5;
                for (j in [2..sizeof(mas)-1])
                {
                    if ((j mod 3) == 2 or (j mod 3) == 0) { continue; }
                    else if ((mas[j] as SwingButton) == (event.node as SwingButton))
                    {
                        ind = j+1;
                        break;
                    }
                }

                var tf: SwingTextField = SwingTextField
                {
                    layoutY: ind/3*25+57, layoutX: 10
                    columns: 20
                    text: "{(mas[ind-3] as Text).content}"
                    selectOnFocus: true
                }

                var okbt: SwingButton = SwingButton
                {
                    layoutX: 300, layoutY: ind/3*25+55
                    text: "Сохранить изменения"
                    width: 197
                    action: function()
                    {
                        (mas[ind-3] as Text).content = tf.text;
                        delete mas[sizeof(mas)-1];
                        delete mas[sizeof(mas)-1];
                    }
                }

                insert tf into mas;
                insert okbt into mas;
            }
        }

        insert txt into mas;
        insert delb into mas;
        insert edb into mas;
    }
}

var mas: Node[] = [txtfld, bt];

var st: Stage = Stage
{
    title: "Список"
    width: 520
    height: 600
    scene: Scene
    {
        content: bind mas
    }
}

//Сейчас воскресение, 27.09.09, 22:49
//Формально я успел
//Молодец, теперь осталось исправить ошибки, которые возникают при работе с вашей программой.

/*
Чуть-чуть подкорректировал код, подправил некоторые сомнительные места.
Однако так и не смог избавится от Exception'ов. Результаты моих исследований:
Методом закомментирования установил, что проблема возникает в районе делитов
(искал для начала в первой кнопке). Пробовал: приведение типов, delete траляля from mas,
комбинацию try-catch. К сожалению, ни один из способов к исчезновению ошибок не привел.
Гугл по запросам выдает только Java'вские ошибки, которые, как я понял, мне не особо
помогут.
*/
/*#2
Еще чуть-чуть подправил код; установил местоположения проблем - инсерты на 105ой
и 106ой строках и делиты на 55ой, 56ой и 57ой строках. Так и не смог избавится.
*/